﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;
using IBatisNet.DataMapper;
using TumbaloSoft.Helpers.QueryObjects;
using TumbaloSoft.Models;


namespace TumbaloSoft.Helpers
{
    public class HelperEmpleado
    {

        static public int SiguienteCodigo()
        {
            return (int)Mapper.Instance().QueryForObject("EmpleadoSiguienteCodigo", null);
        }

        static public int SiguienteCodigoPeriodoLaboral()
        {
            return (int)Mapper.Instance().QueryForObject("EmpleadoSiguienteCodigoPeriodoLaboral", null);
        }
        public static int insert(Empleado emp)
        {
            
            Mapper.Instance().Insert("EmpleadoInsertPersona", emp);
            Mapper.Instance().Insert("EmpleadoInsert", emp);
            Mapper.Instance().Insert("EmpleadoEdificioInsert", emp);
            //Este metodo llena los campos str con el tiempo
            emp.timeToStr();
            Mapper.Instance().Insert("HorarioInsert", emp);
            return 0;
        }

        public static void update(Empleado emp)
        {
            Mapper.Instance().Update("EmpleadoUpdatePersona", emp);
            Mapper.Instance().Update("EmpleadoUpdate", emp);
            if (emp.prPeriodoLaboral.prEdificio.prIdEdificio != HelperEmpleado.selectIdEdificioTrabajo(emp.prIdEmpleado))
            {
                //Cambie de edificio      
                emp.prPeriodoLaboral.prIdPeriodoLaboral = SiguienteCodigoPeriodoLaboral();
                Mapper.Instance().Update("EmpleadoPeriodoLaboralUpdate", emp);
            }
            //Este metodo llena los campos str con el tiempo
            emp.timeToStr();
            Mapper.Instance().Update("EmpleadoHorarioDiaUpdate", emp);
        }

        public static void delete(Empleado emp)
        {
            Mapper.Instance().Update("EmpleadoDelete", emp);
        }

        static public IList selectAll()
        {
            return Mapper.Instance().QueryForList("EmpleadoSelectAll", null);
        }

        public static IList buscar(BusquedaEmpleado empleadoBuscar)
        {
            return Mapper.Instance().QueryForList("EmpleadoBuscar", empleadoBuscar);
        }

        public static int selectCountActivos()
        {
            return (int)Mapper.Instance().QueryForObject("EmpleadoSelectCountActivos", null);
        }

        public static Empleado selectById(int id)
        {
            IList empleado = Mapper.Instance().QueryForList("EmpleadoSelectById", id);
            if (empleado.Count == 0) return null;
            Empleado emp = (Empleado)(empleado[0]);
            return emp;
        }

        public static int selectIdEdificioTrabajo(int id)
        {
            if (Mapper.Instance().QueryForObject("EmpleadoSelectEdificioTrabajo", id) == null)
            {
                return 0;
            }
            else 
            {
                return (int)Mapper.Instance().QueryForObject("EmpleadoSelectEdificioTrabajo", id);       
            }
        }



        public static int RegistrarEntrada(int idEmpleado)
        {
            Mapper.Instance().Insert("EmpleadoAsistenciaEntradaInsert", idEmpleado);
            return 0;
        }

        public static int RegistrarSalida(int idEmpleado)
        {
            Mapper.Instance().Update("EmpleadoAsistenciaSalidaUpdate", idEmpleado);
            return 0;
        }

        public static bool verificarEntrada(int p)
        {
            String estado = (String) Mapper.Instance().QueryForObject("EmpleadoVerificarEntrada", p);
            if (estado == null) return false;
            return true;
        }

        public static bool verificarSalida(int p)
        {
            String estado = (String)Mapper.Instance().QueryForObject("EmpleadoVerificarSalida", p);
            if (estado == "ACTIVO") return true;
            return false;
        }

        public static Horario selectHorarioEmpleado(int id)
        {
            Horario horario = new Horario();
            DiaHorario diaHorario = null;
            IList dias = Mapper.Instance().QueryForList("selectHorarioEmpleado", id);
            if (dias.Count == 0) return null;
            for (int i = 0; i<dias.Count ; i++ )
            {                     
                diaHorario = (DiaHorario)dias[i];
                diaHorario.prHoraEntrada = TimeSpan.ParseExact(diaHorario.prHoraEntradaStr, @"hh\:mm\:ss", null);
                diaHorario.prHoraSalida = TimeSpan.ParseExact(diaHorario.prHoraSalidaStr, @"hh\:mm\:ss", null);
                bool auxB;
                switch (diaHorario.prDia) 
                {
                    case "LUNES": 
                        horario.prLunes = diaHorario; 
                        auxB = (horario.prLunes.prEstado.CompareTo("ACTIVO") == 0);
                        horario.prLunes.prActivo = auxB?"1":"0";
                        break;
                    case "MARTES": 
                        horario.prMartes = diaHorario; 
                        auxB = (horario.prMartes.prEstado.CompareTo("ACTIVO") == 0); 
                        horario.prMartes.prActivo = auxB?"1":"0"; 
                        break;
                    case "MIERCOLES": 
                        horario.prMiercoles = diaHorario; 
                        auxB = (horario.prMiercoles.prEstado.CompareTo("ACTIVO") == 0); 
                        horario.prMiercoles.prActivo = auxB?"1":"0"; 
                        break;
                    case "JUEVES": 
                        horario.prJueves = diaHorario; 
                        auxB = (horario.prJueves.prEstado.CompareTo("ACTIVO") == 0); 
                        horario.prJueves.prActivo = auxB?"1":"0"; 
                        break;
                    case "VIERNES": 
                        horario.prViernes = diaHorario; 
                        auxB = (horario.prViernes.prEstado.CompareTo("ACTIVO") == 0); 
                        horario.prViernes.prActivo = auxB?"1":"0";
                        break;
                    case "SABADO": 
                        horario.prSabado = diaHorario; 
                        auxB = (horario.prSabado.prEstado.CompareTo("ACTIVO") == 0); 
                        horario.prSabado.prActivo = auxB?"1":"0";
                        break;
                    case "DOMINGO": 
                        horario.prDomingo = diaHorario; 
                        auxB = (horario.prDomingo.prEstado.CompareTo("ACTIVO") == 0); 
                        horario.prDomingo.prActivo = auxB?"1":"0";
                        break;
                }
     
            }
            return horario;
        }

        public static int selectCountActivos(AdministradorEdificios administrador)
        {
            int idEdificio = HelperAdministrador.buscaEdificioAdministrado(administrador.prIdAdministrador);
            return (int)Mapper.Instance().QueryForObject("EmpleadoSelectCountActivosAdmin", idEdificio);       
        }
    }
}